﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCobros : Form
    {
        Utils.Numeros U = new Utils.Numeros();

        IList<Cupon> cuponL;

        private frmPrincipal parent = null;
        public frmCobros()
        {
            InitializeComponent();
        }

        private void frmCobros_Load(object sender, EventArgs e)
        {
            inicializar();

            parent = (frmPrincipal)this.MdiParent;
        }

        private void inicializar()
        {
            //cuponesL = new DataTable();
            //cuponesL.Columns.Add("ID");
            //cuponesL.Columns.Add("NUMERO");
            //cuponesL.Columns.Add("AFILIADO");
            //cuponesL.Columns.Add("TOTAL");

            cuponL = new List<Cupon>();

            dtpFecha.Value = DateTime.Now;

            dgvCupones.AutoGenerateColumns = false;
            dgvCupones.DataSource = null;

            limpiarCampos();
        }

        private void limpiarCampos()
        {
            //cupon = new DataTable();
            try
            {
                txtCupon.Text = string.Empty;
                dgvCupones.Rows.Clear();

                foreach (var fila in cuponL)
                {
                    double total = 0;
                    IList<Periodo> periodo = Periodos.GetPeriodosByIdCupon(fila.id);

                    total = fila.total;

                    if (dtpFecha.Value >= periodo[0].vencimiento_2)
                    {
                        total += periodo[0].recargo;
                    }

                    dgvCupones.Rows.Add(fila.id, fila.numero, fila.socio.apellido + ", " + fila.socio.nombres,
                        U.AgregarDecimales(total.ToString()));
                }

                txtCupon.Focus();
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void txtCupon_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarCupon();
            }
        }

        private void BuscarCupon()
        {
            bool error = false;
            try
            {
                if (txtCupon.Text != string.Empty)
                {
                    txtCupon.Text = txtCupon.Text.Replace("'", "-");

                    //cupon = Cupones.FindByNumero(txtCupon.Text);
                    Cupon _cupon = Cobros.FindByCupon(txtCupon.Text);

                    if (_cupon != null)
                    {
                        if (_cupon.estado == "P")
                        {
                            error = true;
                            MessageBox.Show("El cupón ya se encuentra pago, verifique el número de cupón e intente nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }

                        //if (cc.cupon.transito == "I") //INGRESO
                        //{
                        //    error = true;
                        //    MessageBox.Show("El cupón ya ha sido ingresado, verifique el número de cupón e intente nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        //}

                        if (error == false)
                        {
                            cuponL.Add(_cupon);
                        }

                        limpiarCampos();
                    }
                    else
                    {
                        MessageBox.Show("No se ha podido encontrar el número de cupón. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvCupones_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 5)
            {
                cuponL.RemoveAt(e.RowIndex);
                limpiarCampos();

                //dgvCupones.Rows.RemoveAt(e.RowIndex);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                IList<CobradorCupon> cuponesEntradaL = new List<CobradorCupon>();
                IList<Cobro> cuponesPagosL = new List<Cobro>();

                if (Convert.ToBoolean(parent.usuario.rol.permisos.insertar) == true)
                {
                    //int res = 0;

                    IList<string> cuponesL = new List<string>();
                    foreach (var cupon in cuponL)
                    {
                        // -- ENTRADA DE CUPONES --
                        CobradorCupon _cobradorCupon = new CobradorCupon();

                        _cobradorCupon.cobrador_id = 1;
                        _cobradorCupon.cupon_id = Convert.ToInt32(cupon.id);
                        _cobradorCupon.fecha = Convert.ToDateTime(dtpFecha.Value);
                        _cobradorCupon.tipo_movimiento = "I";

                        cuponesEntradaL.Add(_cobradorCupon);
                        // ------------------------

                        // -- CUPONES PAGOS --
                        Cobro _cobro = new Cobro();

                        _cobro.cupon_id = _cobradorCupon.cupon_id;
                        _cobro.formapago_id = cupon.socio.formapago_id;
                        _cobro.fecha = _cobradorCupon.fecha;
                        _cobro.total = Convert.ToDouble(U.AgregarDecimales(cupon.total.ToString()));

                        //if (string.IsNullOrEmpty(fila.Cells["IMPORTE_PAGO"].Value.ToString()))
                        //{
                        //    _cobro.total = Convert.ToDouble(U.AgregarDecimales(fila.Cells["TOTAL_PAGO"].Value.ToString()));
                        //}
                        //else
                        //{
                        //    _cobro.total = Convert.ToDouble(U.AgregarDecimales(fila.Cells["IMPORTE_PAGO"].Value.ToString()));
                        //}

                        cuponesPagosL.Add(_cobro);

                        // -------------------

                        cuponesL.Add(cupon.numero);
                    }

                    int res = 0;
                    res = Cobros.RegistrarCobroPorCobrador(cuponesEntradaL, cuponesPagosL);
                    //res = Cobros.RegistrarCobro(cuponesL, dtpFecha.Value);

                    if (res > 0)
                    {
                        MessageBox.Show("El pago se registró correctamente.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        inicializar();
                    }
                    else
                    {
                        MessageBox.Show("No se ha podido registar el pago de los cupones. Intente Nuevamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("No tiene privilegios para realizar la operación", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error : " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
